/**
 * 启动聊天的服务端程序
 */
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
//记录所有登陆过的用户
const users = []

server.listen(3000, () => {
  console.log("服务器启动成功");
});


//express 处理静态资源
app.use(require('express').static('public'))

app.get('/', function (req, res) {
  //访问目录直接重定向到首页
  res.redirect('/index.html');
});

io.on('connection', function (socket) {
  socket.on('login', data => {
    //判断，如果data在users中存在，说明该用户已经登陆过了，不允许登录
    //  如果不存在，说明该用户没登录，允许用户登录
    let user = users.find(item => item.username === data.username)
    if (user) {
      //用户存在，登陆失败
      socket.emit('loginError', { msg: '登陆失败' })
    } else {
      users.push(data)
      socket.emit('loginSuccess', data)

      //告诉所有用户有人登录进来
      //socket.emit : 告诉当前用户
      //io.emit :广播事件
      io.emit('addUser', data)
      //告诉所有用户目前聊天室有多少人
      io.emit('userList', users)
      socket.username = data.username
      socket.avatar = data.avatar
    }
  });

  //用户断开连接
  socket.on('disconnect', () => {
    //把当前用户的信息从users中删除
    //1.告诉所有人有人离开
    // userlist更新
    let idx = users.findIndex(item => item.username === socket.username)
    //删除断开连接的那个人
    users.splice(idx, 1)
    io.emit('delUser', {
      username: socket.username,
      avatar: socket.avatar
    })
    io.emit('userList',users)
  })

  //监听聊天信息
  socket.on('sendMessage', data => {
    
    //广播给所有用户
    io.emit('receiveMessage',data)
  })

  //解释图片
  socket.on('sendP', data => {
    
    //广播给所有用户
    io.emit('receiveP',data)
  })
});
